/**
 * server-api
 * @author: xiufu.wang
 */
const DataSource = require('nedb')
const path = require('path')
/**
 * 参考 https://github.com/louischatriot/nedb/tree/v1.6.0#creatingloading-a-database
 */
const db = {};
//生命数据库
db.codeGen = new DataSource({ filename: path.resolve(__dirname, '../../nedb.db') })

//加载数据库
db.codeGen.loadDatabase()

function createResonseError(message, data) {
    return {
        error: 'code-gen',
        message: message,
        data: data
    }
}

function createResonseSuccess(message, data) {
    return {
        success: true,
        message: message,
        data: data
    }
}

/**
 * 添加新的数据源
 * {
 *   type: '' 数据源分类,
 *   dataSource: {
 *      type: [object | url | dataSource], 类型: 静态、url、dataSource组合
 *      params: {}, 参数
 *      target: '?' 
 *      methods: 'post|get|postForm',
 *      transforms: [] //转换
 *   }
 * }
 * @param {*} doc 
 */
exports.addNewDataSource  = function(req, res){
    const {data} = req.body
    if (!data || !data.type || !data.dataSource){
        res.json(createResonseError('添加数据源失败! 接口参数错误', data))
        return
    }
    db.codeGen.insert(data, function(err, docs){
        if (err){
            res.json(createResonseError('添加数据源失败!' + err.message, data))
        } else {
            res.json(createResonseSuccess('添加成功!', docs))
        }
    })
}

/**
 * 批量添加数据源
 * @param {*} req 
 * @param {*} res 
 * @returns 
 */
exports.addNewDataSources  = function(req, res){
    const {datas} = req.body
    if (!datas){
        res.json(createResonseError('添加数据源失败! 接口参数错误', datas))
        return
    }
    db.codeGen.insert(datas, function(err, docs){
        if (err){
            res.json(createResonseError('添加数据源失败!' + err.message, datas))
        } else {
            res.json(createResonseSuccess('添加成功!', docs))
        }
    })
}

/**
 * 删除数据源
 * @param {*} req 
 * @param {*} res 
 * @returns 
 */
exports.deleteDataSource  = function(req, res){
    const {data} = req.body
    if (!data || !data.id){
        res.json(createResonseError('删除数据源失败! 接口参数错误', data))
        return
    }
    db.codeGen.remove({_id: data.id}, function(err, docs){
        if (err){
            res.json(createResonseError('删除数据源失败!' + err.message, data))
        } else {
            res.json(createResonseSuccess('添加成功!' , docs))
        }
    })
}

/**
 * 批量删除数据源
 * @param {*} req 
 * @param {*} res 
 * @returns 
 */
 exports.deleteDataSources  = function(req, res){
    const {data} = req.body
    if (!data || !data.ids){
        res.json(createResonseError('删除数据源失败! 接口参数错误', data))
        return
    }
    db.codeGen.remove({_id: {$in: data.ids}}, function(err, docs){
        if (err){
            res.json(createResonseError('删除数据源失败!' + err.message, data))
        } else {
            res.json(createResonseSuccess('删除成功!', docs))
        }
    })
}

/**
 * 更新数据源
 * @param {*} req 
 * @param {*} res 
 * @returns 
 */
exports.updateDataSource  = function(req, res){
    const {data} = req.body
    if (!data || !data._id){
        res.json(createResonseError('更新数据源失败! 接口参数错误', data))
        return
    }


    db.codeGen.remove({_id: {$in: data.ids}}, function(err, docs){
        if (err){
            res.json(createResonseError('更新数据源失败!' + err.message, data))
        } else {
            res.json(createResonseSuccess('删除成功!', docs))
        }
    })
}


/**
 * 更新数据源=>数据源结果集
 * @param {*} req 
 * @param {*} res 
 * @returns 
 */
 exports.updateDataSource  = function(req, res){
    const {data} = req.body
    if (!data || !data._id){
        res.json(createResonseError('更新数据源失败! 接口参数错误', data))
        return
    }


    db.codeGen.remove({_id: {$in: data.ids}}, function(err, docs){
        if (err){
            res.json(createResonseError('更新数据源失败!' + err.message, data))
        } else {
            res.json(createResonseSuccess('删除成功!', docs))
        }
    })
}

